package comportamento.redeneural;

import comportamento.neuronio.INeuronio;

public interface IRedeNeural {

    INeuronio criarNeuronio();
    
    INeuronio criarNeuronioMP(double limiar);
    
    INeuronio criarNeuronioGenerico(double limiar, int funcaoAtivacao);
    
    INeuronio criarNeuronio(int funcaoAtivacao);
    
    INeuronio criarNeuronio(Class<? extends INeuronio> neuronioConcreto);

    INeuronio criarNeuronio(Class<? extends INeuronio> neuronioConcreto, int funcaoAtivacao);
    
    double[] estimular(double[] estimulos);
    
    void treinar(double[][] entradas, double[][] saidas);
    
    void adicionarCamadaNeural(ICamadaNeural camada);
    
    void criarCamadaNeural(int quantidadeNeuronios, int tipoNeuronio);
    
    void criarCamadasNeurais(int quantidadeCamadas, int[] quantidadeNeuronios, int[] tiposNeuronios, double[] limiares) throws IllegalArgumentException;
    
    void removerCamadaNeural(ICamadaNeural camada);
    
    ICamadaNeural primeiraCamada();

    ICamadaNeural ultimaCamada();
    
    ICamadaNeural proximaCamada();
    
    boolean temCamadas();
    
    ICamadaNeural camadaNeural();
}
